#include "usart.h"
#include "gd32e10x.h"


#if defined(GD32_USE_USART0)
static void usart0_msp_init(void)
{
#if defined(USART0_TX_A9_RX_A10)
    /* enable GPIO clock */
    rcu_periph_clock_enable(RCU_GPIOA);
    /* connect port to USART0_Tx */
    gpio_init(GPIOA,GPIO_MODE_AF_PP,GPIO_OSPEED_MAX,GPIO_PIN_9);
    /* connect port to USART0_Rx */
    gpio_init(GPIOA,GPIO_MODE_AF_PP,GPIO_OSPEED_MAX,GPIO_PIN_10);
#elif defined(USART0_TX_B6_RX_B7)
    /* enable GPIO clock */
    rcu_periph_clock_enable(RCU_AF);
    rcu_periph_clock_enable(RCU_GPIOB);
    
    gpio_pin_remap_config(GPIO_USART0_REMAP,ENABLE);
    /* connect port to USART0_Tx */
    gpio_init(GPIOB,GPIO_MODE_AF_PP,GPIO_OSPEED_MAX,GPIO_PIN_6);
    /* connect port to USART0_Rx */
    gpio_init(GPIOB,GPIO_MODE_IPU,GPIO_OSPEED_MAX,GPIO_PIN_7);
#endif
}

void uart_init(uint32_t uartx,uint32_t baudval)
{
    switch(uartx)
    {
        case USART0:
            usart0_msp_init();

            rcu_periph_clock_enable(RCU_USART0);
            
            usart_deinit(uartx);
            usart_baudrate_set(uartx,baudval);
            usart_parity_config(uartx,USART_PM_NONE);
            usart_word_length_set(uartx,USART_WL_8BIT);
            usart_stop_bit_set(uartx,USART_STB_1BIT);
            
            usart_receive_config(uartx, USART_RECEIVE_ENABLE);
            usart_transmit_config(uartx, USART_TRANSMIT_ENABLE);
            
            usart_enable(uartx);
            usart_flag_clear(uartx,USART_FLAG_TC);
            break;
        
        case USART1:
            break;
        
        case USART2:
            break; 

        case UART3:
            break;

        case UART4:
            break;        
    }

}
#endif
